路径规划 室外模拟导航 室内模拟导航

最后更新时间:2019年6月17日

功能描述

完整意义上的地图导航,包括两部分,一是路线规划,二是路径引导(导航)。只有规划出路线之后,才能进行路径引导。

路径规划,即通过起点、途经点、终点以及偏好设置,基于导航数据分析计算,规划出想要的最佳路径。MapGIS Mobile 10.3 for Android SDK导航模块提供的功能接口,支持针对不同的路线规划需求,如距离最短、时间最快、费用最低等多偏好设置;多个途经点和避让区的设置;跨楼层的室内路径计算,以及室内外一体化的路径计算。不同需求采用不同接口,来满足实际应用中的各种需求。

实现方法

路径规划功能实现的一般流程如下图所示:

路径规划实现方法.png

1

构造路径规划对象

RouteAnalysis routeAnalysis = new RouteAnalysis();

2

初始化路径分析对象

通过室内外导航数据路径,初始化路径分析对象。

//获取室外、室内导航数据的存储路径
String mOutdoorNaviDB = Environment.getExternalStorageDirectory().getPath() + "/MapGIS Sample/Navigation/outdoor/WuhanNavi.db";
String mIndoorNaviDB = Environment.getExternalStorageDirectory().getPath() + "/MapGIS Sample/Navigation/indoor";
//初始化路径分析对象,为路径规划对象设置导航数据路径(参数1:室外导航数据文件路径;参数2:室内导航数据目录)
routeAnalysis.init(mOutdoorNaviDB, mIndoorNaviDB);

3

确定路径点

确定导航的出发地、途经点、目的地,可通过GPS定位功能获取设备当前定位点作为起点,也可通过POI搜索获取,或者通过用户手势交互选点获取;起点、途经点、终点可用图像GraphicImage方式绘制显示在地图上。

//确定路径规划的起点、终点,需要的话可以设置中间点。
Dot mStartPoint=new Dot(12735810,3563516);    //起点
Dot mWayPoint1=new Dot(12725802,3571690);     //途经点,可有多个
Dot mEndPoint=new Dot(12737650,3581877);      //终点
//创建路径点数组对象
WayPoint[] wayPoints = new WayPoint[3];
//从起点到终点按顺序存储
wayPoints[0] = new WayPoint(mStartPoint);
wayPoints[1] = new WayPoint(mWayPoint1);
wayPoints[2] = new WayPoint(mEndPoint);

重要说明:在构造路径点WayPoint对象时,室内、室外路径点的构造方式不一样:

wayPoints[0] = new WayPoint(mStartPoint);
//构造WayPoint路径点对象,楼层为9层,楼栋为598号。
wayPoints[0] = new WayPoint(mStartPoint, 8, 598);  //-1为负一层,0为1层,1为二层,以此类推

4

计算路径

在准备工作完成后,使用室内外一体化路径规划接口calculationRoute()计算路径。如下:设置目标行进的方向、室外算路模式为距离最短、室内算路模式室内优先电梯、不设置规避区、不设置车牌号。

//计算路径,返回Route集合
List<Route> routeList = routeAnalysis.calculationRoute(-1.0f, wayPoints, RouteAnalysis.DrivingLeastDistance, RouteAnalysis.RouteModeIndoorPreferElevator, null, null);

calculationRoute接口具体说明如下,可通过各种参数的设置来实现特定的功能。

接口 说明
calculationRoute(float angle, WayPoint[] wayPoints, int naviMode, int naviModeIndoor, com.zondy.mapgis.core.geometry.Rect[] avoidRegions, java.lang.String plateNO))
参数:定位目标行进的方向、路径点、室外道路算路模式、室内道路算路模式、规避区域、车牌号
路径计算

SDK提供了多种算路模式,可以根据个人偏好,设置不同参数来得到不同的导航路线:室外导航可以选择步行或者驾车;驾车的话可以选择距离最短、用时最少或者最省钱的路线;室内导航可以选择优先电梯或者优先楼梯的路线。如下表所示,各种算路模式对应com.zondy.mapgis.core.route.RouteAnalysis类中的字段常量。算路模式的实现必须有相应的数据支持。

算路模式 算路模式参数
室外 驾车最短距离 DrivingLeastDistance
驾车时间最短 DrivingLeastTime
驾车最省钱 DrivingSaveMoney
步行 WalkDefault
室内 室内优先电梯 RouteModeIndoorPreferElevator
室内优先自动扶梯 RouteModeIndoorPreferEscalator
室内优先楼梯 RouteModeIndoorPreferStairs

5

获取路径信息

路径规划成功后,得到路径,通过获取Route路线对象获取信息,如路线坐标点、路段描述、路段数目、路径外包矩形等。最重要的是路线的绘制,可通过纹理线绘制功能将路线的坐标点绘制成线展示在地图上。

//获取计算得到的第一条路径
Route mRoute = routeList.get(0);
Rect routeRect = mRoute.getBoundingRect();     //1、获取路径外包矩形,可用于将地图缩放到此范围
int segCount = mRoute.getStepCount();          //2、获取路段数目
String overViewString = mRoute.getOverview();  //3、获取路径描述
Dot[] coorDots = mRoute.getCoors();            //4、获取路径坐标,用于路线的绘制显示

//路线绘制:绘制纹理线
GraphicPolylin routeLine = new GraphicPolylin(coorDots);                 //创建线图形对象
Bitmap bitMap = BitmapCreator.fromAsset(this, "ico_texture_line.png");   //位图对象
routeLine.setFillTexture(bitMap);                                        //设置填充纹理
routeLine.setLineWidth(bitMap.getHeight());                              //设置线宽
mapView.getGraphicsOverlay().addGraphic(routeLine);                      //绘制
mapView.refresh();                                                       //刷新

提示:导航数据为何种空间参考系,得到的路线坐标也是相同的坐标系,如果和显示地图的参考系不匹配,则需要转换。例如,如果导航数据为经纬度坐标,地图为Web墨卡托坐标系,获取路径坐标之后,需将其坐标点转换,才能正常显示在地图上。

路径规划-室外.jpg 路径规划-室内.jpg